home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HPAVC
/
HPAVC CD-ROM.iso
/
SNNSV32.ZIP
/
SNNSv3.2
/
kernel
/
sources
/
art_ui.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-04-25
|
9KB
|
340 lines
/*****************************************************************************
FILE : art_ui.c
SHORTNAME :
SNNS VERSION : 3.2
PURPOSE : SNNS-Kernel-User-Interface for ART Networks
NOTES :
AUTHOR : Kai-Uwe Herrmann
DATE : 17.05.92
CHANGED BY : Sven Doering
IDENTIFICATION : @(#)art_ui.c 1.8 3/15/94
SCCS VERSION : 1.8
LAST CHANGE : 3/15/94
Copyright (c) 1990-1994 SNNS Group, IPVR, Univ. Stuttgart, FRG
******************************************************************************/
#include "kr_typ.h" /* Global Definitions for User Interface */
#include "kr_ui.h" /* User Interface - Function Prototypes */
#include "kr_const.h" /* Global constants for kernel */
#include "glob_typ.h" /* Global Definitions for User Interface */
#include "kernel.h"
#include "art_typ.h" /* ART Global Definitions */
#include "kr_art.h" /* ART Kernel Function Prototypes */
#include "kr_art1.h"
#include "kr_art2.h"
#include "kr_amap.h"
#include "krart_df.h" /* ART definitions and Macros */
#include "art_ui.h" /* ART User Interface Function Prototypes */
/* funcname: artui_GetClassifiedStatus ()
Purpose : Returns the classification status of the actual network
in-Par : none
out-Par : status : Possible results are: ART_NO_CLASSIFICATION
ART_CLASSIFIED
ART_NOT_CLASSIFIABLE
ART_DONT_KNOW
ret_val : krui_err: Returns an error if no Units defined
*/
krui_err artui_getClassifiedStatus (art_cl_status *status)
{
krui_err ret_code = KRERR_NO_ERROR;
*status = ART_NO_CLASSIFICATION;
if (krui_getNoOfUnits() == 0) {
ret_code = KRERR_NO_UNITS;
return (ret_code);
} /*if*/
/* Check if network has been initialized or update- or learning function
has been applied to it. If not, we can not know, which type of ART
network this is, so we return, that there has been no classification.
*/
if (NetModified) {
return (ret_code);
} /*if*/
switch (TopoSortID) {
case ART1_TOPO_TYPE:
if (ART1_CLASSIFIED) {
*status = ART_CLASSIFIED;
} else {
if (ART1_NOT_CLASSIFIABLE) {
*status = ART_NOT_CLASSIFIABLE;
} /*if*/
} /*if*/
break;
case ART2_TOPO_TYPE:
if (ART2_CLASSIFIED) {
*status = ART_CLASSIFIED;
} else {
if (ART2_NOT_CLASSIFIABLE) {
*status = ART_NOT_CLASSIFIABLE;
} /*if*/
} /*if*/
case ARTMAP_TOPO_TYPE:
if (ARTMAP_CLASSIFIED) {
if (kram_AllMapUnitsActive()) {
*status = ART_DONT_KNOW;
} else {
*status = ART_CLASSIFIED;
} /*if*/
} else {
if (ARTMAP_NOT_CLASSIFIABLE) {
*status = ART_NOT_CLASSIFIABLE;
} /*if*/
} /*if*/
default:
break;
} /* switch */
return (ret_code);
} /* artui_getClassifiedStatus () */
/* funcname: artui_getClassNo ()
Purpose : Returns the index of the F2-winner-unit
in-par : none
out-par : class_no : If unit_no is negative, then no winning unit exists.
ret-val : krui_err : Returns an error if no Units defined.
*/
krui_err artui_getClassNo (int *class_no)
{
krui_err ret_code = KRERR_NO_ERROR;
*class_no = -1;
if (krui_getNoOfUnits () == 0) {
ret_code = KRERR_NO_UNITS;
return (ret_code);
} /*if*/
/* Check if network has been initialized or update- or learning function
has been applied to it. If not, we can not know, which type of ART
network this is, so we return, that there has been no classification.
If there is a adequate TopoSortID, then we get the no. of the class,
if there has been a classification.
*/
if (NetModified) {
return (ret_code);
} /*if*/
switch (TopoSortID) {
case ART1_TOPO_TYPE:
if (ART1_CLASSIFIED) {
*class_no = kra1_getClassNo ();
} /*if*/
break;
case ART2_TOPO_TYPE:
if (ART2_CLASSIFIED) {
*class_no = kra2_getClassNo ();
} /*if*/
case ARTMAP_TOPO_TYPE:
if (ARTMAP_CLASSIFIED && (!kram_AllMapUnitsActive())) {
*class_no = kram_getClassNo ();
} /*if*/
default:
break;
} /* switch */
return (ret_code);
} /* artui_getClassNo () */
/* funcname: artui_getN ()
Purpose : Returns the number of F1-units in an ART1 or ART2 network
in-par : none
out-par : N : number of F1-Units (-1 is returned if not topologically sorted)
ret-val : krui_err: Returns an error if no Units defined.
*/
krui_err artui_getN (int *N)
{
krui_err ret_code = KRERR_NO_ERROR;
*N = -1;
if (krui_getNoOfUnits() == 0) {
ret_code = KRERR_NO_UNITS;
return (ret_code);
} /*if*/
if (NetModified) {
return (ret_code);
} /*if*/
if ((TopoSortID == ART1_TOPO_TYPE) || (TopoSortID == ART2_TOPO_TYPE)) {
*N = NoOfInputUnits;
} /*if*/
return (ret_code);
} /* artui_getN () */
/* funcname: artui_getM ()
Purpose : Returns the number of F2-units in an ART1 or ART2 network
in-par : none
out-par : M : number of F2-Units (-1 is returned if not topologically sorted)
ret-val : krui_err: Returns an error if no Units defined.
*/
krui_err artui_getM (int *M)
{
krui_err ret_code = KRERR_NO_ERROR;
*M = -1;
if (krui_getNoOfUnits() == 0) {
ret_code = KRERR_NO_UNITS;
return (ret_code);
} /*if*/
if (NetModified) {
return (ret_code);
} /*if*/
switch (TopoSortID) {
case ART1_TOPO_TYPE:
*M = Art1_NoOfRecUnits;
break;
case ART2_TOPO_TYPE:
*M = Art2_NoOfRecUnits;
break;
} /*switch*/
return (ret_code);
} /* artui_getM () */
/* funcname: artui_getNa ()
Purpose : Returns the number of F1a-units in an ARTMAP network
in-par : none
out-par : Na: number of F1a-Units (-1 is returned if not topologically sorted)
ret-val : krui_err: Returns an error if no Units defined.
*/
krui_err artui_getNa (int *Na)
{
krui_err ret_code = KRERR_NO_ERROR;
*Na = -1;
if (krui_getNoOfUnits() == 0) {
ret_code = KRERR_NO_UNITS;
return (ret_code);
} /*if*/
if (NetModified) {
return (ret_code);
} /*if*/
if (TopoSortID == ARTMAP_TOPO_TYPE) {
*Na = ArtMap_NoOfInpUnits_a;
} /*if*/
return (ret_code);
} /* artui_getNa () */
/* funcname: artui_getNb ()
Purpose : Returns the number of F1b-units in an ARTMAP network
in-par : none
out-par : Nb: number of F1b-Units (-1 is returned if not topologically sorted)
ret-val : krui_err: Returns an error if no Units defined.
*/
krui_err artui_getNb (int *Nb)
{
krui_err ret_code = KRERR_NO_ERROR;
*Nb = -1;
if (krui_getNoOfUnits() == 0) {
ret_code = KRERR_NO_UNITS;
return (ret_code);
} /*if*/
if (NetModified) {
return (ret_code);
} /*if*/
if (TopoSortID == ARTMAP_TOPO_TYPE) {
*Nb = ArtMap_NoOfInpUnits_b;
} /*if*/
return (ret_code);
} /* artui_getNb () */
/* funcname: artui_getMa ()
Purpose : Returns the number of F2a-units in an ARTMAP network
in-par : none
out-par : Ma: number of F2a-Units (-1 is returned if not topologically sorted)
ret-val : krui_err: Returns an error if no Units defined.
*/
krui_err artui_getMa (int *Ma)
{
krui_err ret_code = KRERR_NO_ERROR;
*Ma = -1;
if (krui_getNoOfUnits() == 0) {
ret_code = KRERR_NO_UNITS;
return (ret_code);
} /*if*/
if (NetModified) {
return (ret_code);
} /*if*/
if (TopoSortID == ARTMAP_TOPO_TYPE) {
*Ma = ArtMap_NoOfRecUnits_a;
} /*if*/
return (ret_code);
} /* artui_getMa () */
/* funcname: artui_getMb ()
Purpose : Returns the number of F2b-units in an ARTMAP network
in-par : none
out-par : Mb: number of F2b-Units (-1 is returned if not topologically sorted)
ret-val : krui_err: Returns an error if no Units defined.
*/
krui_err artui_getMb (int *Mb)
{
krui_err ret_code = KRERR_NO_ERROR;
*Mb = -1;
if (krui_getNoOfUnits() == 0) {
ret_code = KRERR_NO_UNITS;
return (ret_code);
} /*if*/
if (NetModified) {
return (ret_code);
} /*if*/
if (TopoSortID == ARTMAP_TOPO_TYPE) {
*Mb = ArtMap_NoOfRecUnits_b;
} /*if*/
return (ret_code);
} /* artui_getMb () */